
package rpc;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;


public class ClientThead implements Runnable {
    
    static private ObjectOutputStream salida; 
    static private ObjectInputStream entrada;  
    static private int contador = 1; 
    
     static public Socket client;  
    
    ClientThead(Socket cliente){
         client = cliente;        
    }
    
    /*envio de datos al cliente*/
	static private void enviarDatos(String mensaje){ 
		try{ 
			mensaje = mensaje.toUpperCase(); 
			salida.writeObject(mensaje); 
			salida.flush(); 
			System.out.println("Respuesta : "+mensaje); //envio de respuesta a cliente
		}catch(IOException excepcionES) { 
       
			System.out.println("Fallo envio");
		} 
	}
     

  
	/*flujo de datos de entrada y salida*/
	static private void obtenerFlujos() throws IOException{ 
		salida = new ObjectOutputStream(client.getOutputStream()); 
		salida.flush();
     
		entrada = new ObjectInputStream(client.getInputStream()); 
		System.out.println( "Se establecio la Conexion" ); 
	} 
   
   /*Envio de mensajes de confirmacion de conexion a un cliente conectado*/
	static private void procesarConexion() throws IOException{ 
            
		String mensaje="";
		//while(!mensaje.equals("fin"))
		{
			try{ 
				mensaje = (String) entrada.readObject(); 
				System.out.println("Recibido : " + mensaje); 
	 
				//Enviando el mensaje al Skeleton para su ejecucion en el servidor.
				mensaje = (String) new Skeleton().despachar(mensaje); 
	 
				System.out.println("Resultado:"+mensaje);
				enviarDatos(mensaje);
			}catch(ClassNotFoundException e){ 
				System.out.println("Error en mensaje");
			}	   
		} //espera ilimitada para atender a clientes, 
     //supuestamente debe terminar al envia fin desde el cliente
	}
	
	/*terminar la coneccion*/
	static private void cerrarConexion(){ 
		System.out.println("Fin de conexion"); 
     
		try{ 
			salida.close(); 
			entrada.close(); 
			client.close(); 
		}catch(IOException e){ 
		} 
	} 
    
    @Override
    public void run() {
        try {
            obtenerFlujos();
            procesarConexion();
        } catch (IOException ex) {
            System.out.println("comunicaion terminada");         
	}finally{ 
            cerrarConexion(); 
        }
        
    }
    
    
}
